import { ListNode } from '../../helper/ListNode'
/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
export var middleNode = function (head) {
  // 创建一个虚拟节点, 快慢指针从此节点开始向右移动
  let vnode = new ListNode(-1)
  vnode.next = head
  let slow = vnode
  let fast = vnode
  // 快指针向右移动两个节点，慢指针向右移动一个节点，
  // 当快指针到达末尾时，慢指针指向中间节点
  while (fast && fast.next) {
    slow = slow.next
    fast = fast.next.next
  }
  // 如果是偶数节点 则 fast.next 为 null， 取 slow.next
  // 奇数节点则fast 最终 为 null， 取 slow
  return fast ? slow.next : slow
}
